๐ Docker + MariaDB ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ ์ ๋ฆฌ
WARNING
์๋ณธ์ ํ๋ฌธ ๋น๋ฐ๋ฒํธ(root/์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ )๊ฐ ํฌํจ๋์ด ์์ด ๋ง์คํน ์ฒ๋ฆฌํจ.
macOS ํ๊ฒฝ์์ MariaDB ์ง์ ์ค์น ์ ๋ฐ์ํ CTE/WITH ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
Docker ๊ธฐ๋ฐ MariaDB ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๊ณ ,
CLI ์ค์ฌ์ผ๋ก ์๋ฒ ๊ด๋ฆฌยท์ ์ยท๊ถํ ์ค์ ยทSQL import๋ฅผ ์ํํ ๊ณผ์ ์ ๋ฆฌ
1. Docker CLI๋ฅผ ํ์ฉํ MariaDB ์๋ฒ ๊ธฐ๋
๐น ๋ชฉ์
- macOS(Homebrew) MariaDB ํ๊ฒฝ์์ ๋ฐ์ํ CTE(WITH) ํ ์ด๋ธ ์กฐํ ์ค๋ฅ ํํผ
- ํ์ฌ Linux ์๋ฒ์ ๋์ผํ DB ์์ง/๋์ ํ๊ฒฝ ๊ตฌ์ฑ
๐น ์ฌ์ฉ ์ด๋ฏธ์ง
mariadb:10.11.x(ํ์ฌ์ ๋์ผ ๋ฉ์ด์ ๋ฒ์ )
๐น ์๋ฒ ๊ธฐ๋ ๋ช ๋ น์ด
docker run -d \
--name mariadb-local \
-e MARIADB_ROOT_PASSWORD=<PASSWORD> \
-p 3306:3306 \
mariadb:10.11
๐น ํต์ฌ ํฌ์ธํธ
- Docker MariaDB๋ ์์ ํ ์๋ก์ด DB ์๋ฒ
MARIADB_ROOT_PASSWORD๋ ์ปจํ ์ด๋ ์ต์ด ์์ฑ ์์๋ง ์ ์ฉ- macOS ํ๊ฒฝ ์ ์ฝ์ ์ ๊ฑฐํ๊ณ Linux ํ์ผ์์คํ ๊ธฐ์ค์ผ๋ก ๋์
2. Docker CLI๋ฅผ ํตํ MariaDB ์ ์ ๋ฐฉ๋ฒ
๐น macOS์ MariaDB Client๊ฐ ์๋ ๊ฒฝ์ฐ
mysql,mariadb๋ช ๋ น์ด๊ฐ ์์ โ ์ ์- ์๋ฒ ๋ฌธ์ ์๋, ํด๋ผ์ด์ธํธ ๋ฏธ์ค์น ์ํ
๐น ๊ถ์ฅ ์ ์ ๋ฐฉ๋ฒ (Docker ๋ด๋ถ ์ ์)
docker exec -it mariadb-local mariadb -u root -p
- ๋น๋ฐ๋ฒํธ:
<PASSWORD>(๋ง์คํน๋จ) - ๊ฐ์ฅ ์์ ํ๊ณ Docker-only ๋ฐฉ์
๐น SQL import ์ ์ฃผ์์
docker exec -i๋ ๋น๋ํํ- ๋น๋ฐ๋ฒํธ ํ๋กฌํํธ ์ ๋ ฅ ๋ถ๊ฐ
์ฌ๋ฐ๋ฅธ import ๋ฐฉ์
docker exec -i mariadb-local mariadb -u root -p<PASSWORD> DB_NAME < file.sql
๐ -p<PASSWORD>์ฒ๋ผ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ์ ๋ฌํด์ผ ํจ
3. MariaDB ์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ถํ ๋ถ์ฌ (CLI)
๐น ๋ชฉ์
- root ๊ณ์ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ๊ณ์ ์ฌ์ฉ
- Spring / ์๋น์ค ๊ณ์ ๋ถ๋ฆฌ
๐น ์ฌ์ฉ์ ์์ฑ
docker exec -it mariadb-local mariadb -u root -p<PASSWORD> -e "
CREATE USER IF NOT EXISTS 'app_user'@'%' IDENTIFIED BY '<PASSWORD>';
"
๐น ์ ์ฒด DB ๊ถํ ๋ถ์ฌ
docker exec -it mariadb-local mariadb -u root -p<PASSWORD> -e "
GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"
๐น ํ์ธ
docker exec -it mariadb-local mariadb -u root -p<PASSWORD> -e "
SHOW GRANTS FOR 'app_user'@'%';
"
๐น ์ ์ ํ ์คํธ
docker exec -it mariadb-local mariadb -u app_user -p<PASSWORD>
4. macOS ํ๊ฒฝ์์ CTE(WITH) ํ ์ด๋ธ ์กฐํ ์คํจ ์์ธ
๐น ์ฆ์
-
ํน์ ํ ์ด๋ธ๋ง:
Table 'xxx' doesn't exist in engine 'xxx' is not of type VIEW -
์ผ๋ฐ SELECT๋ ๊ฐ๋ฅ
-
WITH / CTE ๊ตฌ๋ฌธ์์๋ง ์คํจ
๐น ์์ธ ์์ฝ
โ macOS ํ์ผ์์คํ ํน์ฑ
- ๊ธฐ๋ณธ ํ์ผ์์คํ : case-insensitive
- MariaDB ๋ด๋ถ ํ ์ด๋ธ/์์ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ ์กด์ฌ
โก lower_case_table_names = 2 + macOS ์กฐํฉ
- ํ ์ด๋ธ ์์ฑ ์ ๋์๋ฌธ์ ์ ์ง
- ์กฐํ ์ ๋์๋ฌธ์ ๋ฌด์
- CTE / ์์ ํ ์ด๋ธ ์์ฑ ๊ณผ์ ์์ ์ด๋ฆ ์ ๊ทํ ์ถฉ๋ ๋ฐ์
โข ๊ฒฐ๊ณผ
- InnoDB ์์ง ๋ด๋ถ์์
- ์์ ํ ์ด๋ธ / CTE ๊ฒฐ๊ณผ๋ฅผ
- ์ค์ ํ ์ด๋ธ๊ณผ ํผ๋ํ๊ฑฐ๋
- ์์ง ๋ ๋ฒจ์์ ํ ์ด๋ธ ๋ฏธ์กด์ฌ๋ก ํ๋จ
๐ SQL ๋ฌธ๋ฒ ๋ฌธ์ ๊ฐ ์๋๋ผ, OS + FS + DB ์กฐํฉ ๋ฌธ์
๐น Docker(Linux)์์ ํด๊ฒฐ๋ ์ด์
- Linux ํ์ผ์์คํ : case-sensitive
- MariaDB๊ฐ ์๋ํ ๋ฐฉ์์ผ๋ก
-
ํ ์ด๋ธ
-
CTE
-
์์ ๊ฐ์ฒด
๋ฅผ ๋ช ํํ ๊ตฌ๋ถ
-
โก ๋์ผ SQL / ๋์ผ ๋ฐ์ดํฐ / ๋์ผ ๋ฒ์ ์ธ๋ฐ๋ ์ ์ ๋์
โ ์ต์ข ๊ฒฐ๋ก
-
macOS + Homebrew MariaDB๋
CTE / ๋์๋ฌธ์ / ์์ง ๋ ๋ฒจ ๋์์์ ๋ถ์์
-
Docker ๊ธฐ๋ฐ MariaDB(Linux)๋
ํ์ฌ ์๋ฒ์ ๊ฐ์ฅ ๋์ผํ ์คํ ํ๊ฒฝ
-
๋ฌธ์ ์ ๋ณธ์ง์:
โ SQL
โ MyBatis
โ ํ ์ด๋ธ ์์
โญ OS + ํ์ผ์์คํ + MariaDB ๋ด๋ถ ๋์ ์ฐจ์ด
โจ ํ ์ค ์์ฝ
Docker MariaDB๋ ๋จ์ํ ๋์ฒด ์๋จ์ด ์๋๋ผmacOS์์ ์ฌํ ๋ถ๊ฐ๋ฅํ ์๋ฒ ํ๊ฒฝ์ ๋ก์ปฌ์์ ๋ณต์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.